package exchange;

import com.rabbitmq.client.BuiltinExchangeType;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

/**
 * TODO
 *
 * @author gaoxiang
 * @date 2021/7/2723:14
 * Fanout：广播，交换机将消息发送到所有与之绑定的队列中去
 *
 * Direct：定向，交换机按照指定的Routing Key发送到匹配的队列中去
 *
 * Topics：通配符，与Direct大致相同，不同在于Routing Key可以根据通配符进行匹配
 */
public class ExchangeSend {
    public static void main(String[] args) throws Exception {
        //创建链接工厂对象
        ConnectionFactory factory=new ConnectionFactory();
        factory.setHost("121.41.192.69");//设置RabbitMQ的主机IP
        factory.setPort(5672);//设置RabbitMQ的端口号
        factory.setUsername("guest");//设置访问用户名
        factory.setPassword("guest");//设置访问密码
        Connection connection=null;//定义链接对象
        Channel channel=null;//定义通道对象
        connection=factory.newConnection();//实例化链接对象
        channel=connection.createChannel();//实例化通道对象
        String message ="Hello World!";
        channel.queueDeclare("Queue_3", true, false, false, null);
        //指定Exchange的类型
        //参数1为 交换机名称
        //参数2为交换机类型取值为 direct、queue、topic、headers
        //参数3 为是否为持久化消息 true表示持久化消息 false表示非持久化
        channel.exchangeDeclare("Exchange_1", BuiltinExchangeType.DIRECT, true);
        //发送消息到RabbitMQ
        //参数1 我们自定义的交换机名称
        //参数2 自定义的RoutingKey值
        //参数3 设置消息的属性，可以通过消息属性设置消息是否是持久化的
        //参数4 具体要发送的消息信息
        for(int i=0;i<30;i++){
            //11、消息发送-channel.basicPublish(交换机[默认Default Exchage],路由key[简单模式可以传递队列名称],消息其它属性,消息内容)
            channel.basicPublish("Exchange_1",
                    "log.error",null,(message+i).getBytes("utf-8"));
            System.out.println("消息发送成功"+i);
        }
        channel.close();
        connection.close();
    }
}
